package com.lanou3g.code0522;

import javax.servlet.http.*;
import java.io.Serializable;
import java.util.Map;

/*
javaBean
规定:
1.必须是一个public类(公有类)
2.必须有无参构造方法
3.所有属性必须私有
4.所有属性必须提供setter/getter方法来访问
(如果不希望这个属性 可读/可写,也可以根据情况
不提供 对应的setter/getter方法)
如果是boolean类型的属性,那么它的get方法
需要写成isXXX
当一个类 满足了这些要求  我们就叫他javabean
在日常开发中,当我们说javabean的时候  除了满足上述
4个要求,还有隐藏含义,就是这个类 没有什么实际复杂的逻辑
就是和数据库/页面对应的,用来存数据的
* */
/*
HttpSessionBindingListener 这个接口给对象一个能力
可以知道自己何时被放入到session对象中
何时session对象中被销毁
*/
/*
要放到session中的JavaBean  必须实现Serializable接口
否则当session钝化的时候,session域对象中的JavaBean就丢失了
*/
public class Person implements HttpSessionBindingListener ,HttpSessionActivationListener ,Serializable {
    private String name;
    private int age;
    private boolean marry;
    private Map<String,String> jobs;
    private static final long serialVersionUID = 1L;

    public Map<String, String> getJobs() {
        return jobs;
    }

    public Person setJobs(Map<String, String> jobs) {
        this.jobs = jobs;
        return this;
    }

    public boolean isMarry() {
        return true;
    }
    public boolean getMarry() {
        return false;
    }

    public Person setMarry(boolean marry) {
        this.marry = marry;
        return this;
    }

    public String getName() {
        return name;
    }

    public Person setName(String name) {
        this.name = name;
        return this;
    }

    public int getAge() {
        return age-8;
    }

    public Person setAge(int age) {
        this.age = age;
        return this;
    }

    @Override
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("我"+name+"被放入session中");

    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("我"+name+"从session中被销毁了");
    }

    @Override
    public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {

    }

    @Override
    public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {

    }
}
